import "./array";
import "./boolean";
import "./class";
import "./function";
import "./hash-map";
import "./interface";
import "./number";
import "./string";
import "./struct";
import "./xml";
import "./utils/generic";
import "./utils/annotation";
import { GaRegExp, ruleInjectable, ruleInject } from "../InjectionRule";

@ruleInjectable()
export default class dataRule extends GaRegExp {

	@ruleInject() private variableNameRule!: GaRegExp;

	@ruleInject() private numberRule!: GaRegExp;

	@ruleInject() private stringRule!: GaRegExp;

	@ruleInject() private booleanRule!: GaRegExp;

	@ruleInject() private functionRule!: GaRegExp;

	@ruleInject() private classRule!: GaRegExp;

	@ruleInject() private arrayRule!: GaRegExp;

	@ruleInject() private structRule!: GaRegExp;

	@ruleInject() private hashMapRule!: GaRegExp;

	public RuleInit() {
		this.ParseRule([
			"(",
			this.variableNameRule, "|",
			this.numberRule, "|",
			this.stringRule, "|",
			this.booleanRule, "|",
			this.functionRule, "|",
			this.classRule, "|",
			this.arrayRule, "|",
			this.structRule, "|",
			this.hashMapRule,
			")"
		]);
	}

}
